﻿#define _CRT_SECURE_NO_WARNINGS
//作者：爱吃糖的boy
#include<stdio.h>

//函数指针数组:那要把函数的地址存到⼀个数组中，那这个数组就叫函数指针数组

int add(int a, int b)
{

	return a + b;

}
int div(int a, int b)
{

	return a / b;

}int mul(int a, int b)
{

	return a * b;

}int sub(int a, int b)
{

	return a - b;

}

//int main()
//{
//	int (*parr1[3])();//函数指针数组
//	//函数指针也是指针，也可以放入数组里
//	int(*pf)(int, int) = &add;
//	int (*pfArr[4])(int, int) = {add,sub,mul,div};
//	//parr1 先和[] 结合，说明 parr1是数组，数组的内容是什么呢？是 int (*)() 类型的函数指针。
//	for (int i = 0; i < 4; i++)
//	{
//		 int ret = pfArr[i](6,2);
//		 printf("%d\n",ret);
//	}
//	return 0;
//
//} 

//实现计算器
//加法，减法，除法，乘法
void menu() 
{
	printf("*************************\n");
	printf("********1:add 2:sub******\n");
	printf("********3:mul 4:div******\n");
	printf("********0:exit***********\n");
	printf("*************************\n");
}

//int main()
//{
//	int intput = 0;
//	int ret;
//
//	do
//	{
//		
//		menu();
//		int x, y;
//		printf("请选择：\n");
//		scanf("%d", &intput);
//		switch (intput)
//		{
//		case 1:
//			printf("输入操作数\n");
//			scanf("%d %d",&x,&y);
//			ret = add(x,y);
//			printf("%d\n",ret);
//			break;
//		case 2:
//			printf("输入操作数\n");
//			scanf("%d %d", &x, &y);
//			ret = sub(x, y);
//			printf("%d\n", ret);
//			break;
//		case 3:
//			printf("输入操作数\n");
//			scanf("%d %d", &x, &y);
//			ret = mul(x, y);
//			printf("%d\n", ret);
//			break;
//		case 4:
//			printf("输入操作数\n");
//			scanf("%d %d", &x, &y);
//			ret = div(x, y);
//			printf("%d\n", ret);
//			break;
//		case 0:
//			printf("退出\n");
//			break;
//
//
//		default:
//			printf("重新选\n");
//			break;
//		}
//	} while (intput);
//	return 0;
//
//}


//函数指针数组用法
int main()
{
	int intput = 0;
	int ret;
	

	do
	{

		menu();
		//这里的函数指针数组叫做转移表
		int (*pfArr[])(int, int) = { NULL,add,sub,mul,div };
		int x, y;
		printf("请选择：\n");
		scanf("%d", &intput);

		if (intput == 0)
		{
			printf("退出\n");
		}
		else if(intput>= 1&& intput<= 4)
		{
			printf("输入操作数\n");
			scanf("%d %d", &x, &y);
			ret = pfArr[intput](x, y);
			printf("%d\n", ret);
		}
		else
		{
			printf("重新输入\n");
		}
		/*switch (intput)
		{
		case 1:
			printf("输入操作数\n");
			scanf("%d %d", &x, &y);
			ret = add(x, y);
			printf("%d\n", ret);
			break;
		case 2:
			printf("输入操作数\n");
			scanf("%d %d", &x, &y);
			ret = sub(x, y);
			printf("%d\n", ret);
			break;
		case 3:
			printf("输入操作数\n");
			scanf("%d %d", &x, &y);
			ret = mul(x, y);
			printf("%d\n", ret);
			break;
		case 4:
			printf("输入操作数\n");
			scanf("%d %d", &x, &y);
			ret = div(x, y);
			printf("%d\n", ret);
			break;
		case 0:
			printf("退出\n");
			break;


		default:
			printf("重新选\n");
			break;
		}*/
	} while (intput);
	return 0;

}

